//使用递归的方式对对象进行深拷贝操作

function deepCopt(obj){ //传入一个对象进来
    //终止条件
    if(obj === null || typeof obj !== 'object'){ //如果传入的对象为空或者不是对象类型则直接返回对应的属性
        return obj;
    }
    
    const flag = Array.isArray(obj); //判断传入的对象是否是数组类型

    const newObj = flag ? [] : {}; //如果传入的对象是数组类型则创建一个空数组,否则创建一个空对象

    for(let key in obj){ //对传入的数组/对象进行每一个值进行遍历
        if(obj.hasOwnProperty(key)){ //如果当前对象的属性值是对象类型则递归调用deepCopt函数
           newObj[key] = deepCopt(obj[key]);
        }
    }

    return newObj;
}

//test
let obj = {
    a: 1,
    b: 2,
    c: 3,
    d: {
        e: 4,
        f: 5,
        g: 6
    }
}

let newObj = deepCopt(obj);
console.log(newObj);
console.log(newObj === obj);